package queue

import "sync"

// 队列工作调度器
type JobScheduler struct {
	Queues []QueueInterface
}

var (
	jobSchedulerInstance *JobScheduler
	jobSchedulerOnce     sync.Once
)

func JobSchedulerInstance() *JobScheduler {
	jobSchedulerOnce.Do(func() {
		jobSchedulerInstance = &JobScheduler{}
	})
	return jobSchedulerInstance
}

// Start 开启调度器工作
func (s *JobScheduler) Start(queues []QueueInterface) (err error) {
	s.Queues = queues
	for _, q := range queues {
		// 判断是否启用
		if q.GetStatus() != STATUS_RUNNING {
			continue
		}
		err = q.Start()
		if err != nil {
			return
		}
	}
	return
}

// Stop 停止调度器工作
// 确保并发安全，引入锁
func (s *JobScheduler) Stop() {
	for _, q := range s.Queues {
		q.Stop()
	}
}
